<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>

    <script>

        function fun() {
            var age = 19, sex = '男', num = 1001;

// var fn = function () {
//     console.log('');
// }

            var obj = {
                getAge: function () {
                    return age;
                },
                setAge: function (newAge) {
                    // 给 设置的 参数添加限定条件
                    if (newAge < 0 || newAge > 120) {
                        console.log('超出限定范围');
                        return false; // 超出限定的范围的 数据 直接结束函数
                    }
                    age = newAge;
                }
            }

            return obj;
        }

        var p1 = fun();
        p1.setAge(-1);

        console.log(p1.getAge());
        
// 闭包可以 达到 让外界访问私有数据的时候 按接口（闭包提供给外界访问的函数）限定要求 传入数据，
// 闭包可以 缓存数据， 也会造成 数据堆积（在闭包中不会被释放）

        function fun1 () {
            var data = [];

            return {
                add: function (obj) {

                    for(var i = 0; i < arguments.length; i++) {
                        data.push(arguments[i])
                    }
                    // data.push(obj);
                },
                remove: function () {
                    data.shift() // 删除数组的第一个元素
                },
                getData: function () {
                    return data;
                }
            }
        }
        var objFn = fun1();

        // 1.为 data 添加 四个数据
        // objFn.add({name: 'hahah'});
        // objFn.add(1);
        // objFn.add('jsjsj');
        // objFn.add(10);

        objFn.add({name: '王宝强'}, 1, '字符串', true);


        // 2.查看数据
        console.log(objFn.getData());
        
        // 3.删除 两个数据
        objFn.remove();
        objFn.remove();
        // 4.再次查看数据
        console.log(objFn.getData());


        [foo, fun, fn];
        
    </script>


</body>

</html>